using System;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Numerics;
using Nethereum.Hex.HexTypes;
using Nethereum.ABI.FunctionEncoding.Attributes;
using Nethereum.Web3;
using Nethereum.RPC.Eth.DTOs;
using Nethereum.Contracts.CQS;
using Nethereum.Contracts;
using System.Threading;

namespace Nethereum.Optimism.L1CrossDomainMessenger.ContractDefinition
{


    public partial class L1CrossDomainMessengerDeployment : L1CrossDomainMessengerDeploymentBase
    {
        public L1CrossDomainMessengerDeployment() : base(BYTECODE) { }
        public L1CrossDomainMessengerDeployment(string byteCode) : base(byteCode) { }
    }

    public class L1CrossDomainMessengerDeploymentBase : ContractDeploymentMessage
    {
        public static string BYTECODE = "608060405260cc80546001600160a01b03191661dead17905534801561002457600080fd5b50600080546001600160a01b03191690556131bb806100446000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c8063715018a6116100a2578063b1b1b20911610071578063b1b1b20914610208578063c4d66de81461022b578063c6b94ab01461023e578063d7fd19dd14610261578063f2fde38b1461027457600080fd5b8063715018a6146101d457806381ada46c146101dc5780638456cb59146101ef5780638da5cb5b146101f757600080fd5b8063461a4478116100de578063461a44781461019b5780635c975abb146101ae5780636e296e45146101b95780636f1c8d47146101c157600080fd5b80630ecf2eea1461011057806321d800ec14610125578063299ca4781461015d5780633dbb202b14610188575b600080fd5b61012361011e36600461272b565b610287565b005b61014861013336600461272b565b60ca6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b600054610170906001600160a01b031681565b6040516001600160a01b039091168152602001610154565b610123610196366004612879565b6102fd565b6101706101a93660046128d8565b610418565b60655460ff16610148565b610170610490565b6101236101cf366004612928565b610500565b61012361068b565b6101236101ea36600461272b565b6106c1565b61012361072b565b6033546001600160a01b0316610170565b61014861021636600461272b565b60cb6020526000908152604090205460ff1681565b6101236102393660046129b3565b61075d565b61014861024c36600461272b565b60c96020526000908152604090205460ff1681565b61012361026f366004612b17565b610894565b6101236102823660046129b3565b610cae565b6033546001600160a01b031633146102ba5760405162461bcd60e51b81526004016102b190612c4f565b60405180910390fd5b600081815260c96020526040808220805460ff191660011790555182917ff52508d5339edf0d7e5060a416df98db067af561bdc60872d29c0439eaa13a0291a250565b60006103396040518060400160405280601981526020017821b0b737b734b1b0b62a3930b739b0b1ba34b7b721b430b4b760391b815250610418565b90506000816001600160a01b031663b8f770056040518163ffffffff1660e01b8152600401602060405180830381865afa15801561037b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039f9190612c99565b905060006103b68633878564ffffffffff16610d49565b90506103c983828663ffffffff16610d96565b856001600160a01b03167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a338785886040516104089493929190612d10565b60405180910390a2505050505050565b6000805460405163bf40fac160e01b81526001600160a01b039091169063bf40fac190610449908590600401612d58565b602060405180830381865afa158015610466573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048a9190612d6b565b92915050565b60cc546000906001600160a01b031661dead14156104f05760405162461bcd60e51b815260206004820152601f60248201527f78446f6d61696e4d65737361676553656e646572206973206e6f74207365740060448201526064016102b1565b5060cc546001600160a01b031690565b600061053c6040518060400160405280601981526020017821b0b737b734b1b0b62a3930b739b0b1ba34b7b721b430b4b760391b815250610418565b60405163153f8c5f60e11b8152600481018690529091506000906001600160a01b03831690632a7f18be90602401606060405180830381865afa158015610587573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ab9190612d88565b905060006105bb89898989610d49565b9050600073111100000000000000000000000000000000111130016007602160991b0187846040516020016105f39493929190612dec565b6040516020818303038152906040528051906020012090508260000151811461066e5760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520686173206e6f74206265656e20656e60448201526638bab2bab2b21760c91b60648201526084016102b1565b61067f84838763ffffffff16610d96565b50505050505050505050565b6033546001600160a01b031633146106b55760405162461bcd60e51b81526004016102b190612c4f565b6106bf6000610e04565b565b6033546001600160a01b031633146106eb5760405162461bcd60e51b81526004016102b190612c4f565b600081815260c96020526040808220805460ff191690555182917f52c8a2680a9f4cc0ad0bf88f32096eadbebf0646ea611d93a0ce6a29a024040591a250565b6033546001600160a01b031633146107555760405162461bcd60e51b81526004016102b190612c4f565b6106bf610e56565b600054600160a81b900460ff168061077f5750600054600160a01b900460ff16155b61079b5760405162461bcd60e51b81526004016102b190612e24565b600054600160a81b900460ff161580156107c5576000805461ffff60a01b191661010160a01b1790555b6000546001600160a01b0316156108315760405162461bcd60e51b815260206004820152602a60248201527f4c3143726f7373446f6d61696e4d657373656e67657220616c72656164792069604482015269373a34b0b634bd32b21760b11b60648201526084016102b1565b600080546001600160a01b0384166001600160a01b03199182161790915560cc805490911661dead179055610864610eee565b61086c610f6c565b610874610fdd565b61087c611065565b8015610890576000805460ff60a81b191690555b5050565b600260975414156108e75760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016102b1565b600260975560655460ff16156109325760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016102b1565b600061094086868686610d49565b905061094c81836110e8565b15156001146109ad5760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520636f756c64206e6f742062652076656044820152663934b334b2b21760c91b60648201526084016102b1565b8051602080830191909120600081815260cb90925260409091205460ff1615610a2c5760405162461bcd60e51b815260206004820152602b60248201527f50726f7669646564206d6573736167652068617320616c72656164792062656560448201526a37103932b1b2b4bb32b21760a91b60648201526084016102b1565b600081815260c9602052604090205460ff1615610a965760405162461bcd60e51b815260206004820152602260248201527f50726f7669646564206d65737361676520686173206265656e20626c6f636b65604482015261321760f11b60648201526084016102b1565b610ad06040518060400160405280601981526020017821b0b737b734b1b0b62a3930b739b0b1ba34b7b721b430b4b760391b815250610418565b6001600160a01b0316876001600160a01b03161415610b4d5760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f742073656e64204c322d3e4c31206d6573736167657320746f204c604482015272189039bcb9ba32b69031b7b73a3930b1ba399760691b60648201526084016102b1565b60cc80546001600160a01b0319166001600160a01b0388811691909117909155604051600091891690610b81908890612e72565b6000604051808303816000865af19150503d8060008114610bbe576040519150601f19603f3d011682016040523d82523d6000602084013e610bc3565b606091505b505060cc80546001600160a01b03191661dead179055905080151560011415610c2b57600082815260cb6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2610c57565b60405182907f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f90600090a25b6000833343604051602001610c6e93929190612e8e565b60408051601f198184030181529181528151602092830120600090815260ca9092529020805460ff19166001908117909155609755505050505050505050565b6033546001600160a01b03163314610cd85760405162461bcd60e51b81526004016102b190612c4f565b6001600160a01b038116610d3d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102b1565b610d4681610e04565b50565b606084848484604051602401610d629493929190612ecd565b60408051601f198184030181529190526020810180516001600160e01b031663cbd4ece960e01b1790529050949350505050565b60405163037f703f60e51b81526001600160a01b03841690636fee07e090610dcd906007602160991b019085908790600401612f0a565b600060405180830381600087803b158015610de757600080fd5b505af1158015610dfb573d6000803e3d6000fd5b50505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60655460ff1615610e9c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016102b1565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610ed13390565b6040516001600160a01b03909116815260200160405180910390a1565b600054600160a81b900460ff1680610f105750600054600160a01b900460ff16155b610f2c5760405162461bcd60e51b81526004016102b190612e24565b600054600160a81b900460ff16158015610f56576000805461ffff60a01b191661010160a01b1790555b8015610d46576000805460ff60a81b1916905550565b600054600160a81b900460ff1680610f8e5750600054600160a01b900460ff16155b610faa5760405162461bcd60e51b81526004016102b190612e24565b600054600160a81b900460ff16158015610fd4576000805461ffff60a01b191661010160a01b1790555b610f5633610e04565b600054600160a81b900460ff1680610fff5750600054600160a01b900460ff16155b61101b5760405162461bcd60e51b81526004016102b190612e24565b600054600160a81b900460ff16158015611045576000805461ffff60a01b191661010160a01b1790555b6065805460ff191690558015610d46576000805460ff60a81b1916905550565b600054600160a81b900460ff16806110875750600054600160a01b900460ff16155b6110a35760405162461bcd60e51b81526004016102b190612e24565b600054600160a81b900460ff161580156110cd576000805461ffff60a01b191661010160a01b1790555b60016097558015610d46576000805460ff60a81b1916905550565b60006110f38261110b565b80156111045750611104838361123a565b9392505050565b6000806111436040518060400160405280601481526020017329ba30ba32a1b7b6b6b4ba36b2b73a21b430b4b760611b815250610418565b6020840151604051639418bddd60e01b81529192506001600160a01b03831691639418bddd9161117591600401612f6e565b602060405180830381865afa158015611192573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b69190612f81565b1580156111045750825160208401516040808601519051634d69ee5760e01b81526001600160a01b03851693634d69ee57936111f9939192909190600401612fa3565b602060405180830381865afa158015611216573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111049190612f81565b600080836007602160991b0160405160200161125792919061301b565b60408051601f1981840301815282825280516020918201209083015260009082015260600160408051601f19818403018152908290528051602091820120602160f91b91830191909152915060009081906112cb9060340160408051601f19818403018152919052606087015187516113c9565b909250905060018215151461135e5760405162461bcd60e51b815260206004820152604d60248201527f4d6573736167652070617373696e67207072656465706c6f7920686173206e6f60448201527f74206265656e20696e697469616c697a6564206f7220696e76616c696420707260648201526c37b7b310383937bb34b232b21760991b608482015260a4016102b1565b6000611369826113f2565b90506113be8460405160200161138191815260200190565b60408051601f1981840301815290829052600160f81b602083015290602101604051602081830303815290604052886080015184604001516114b6565b979650505050505050565b6000606060006113d8866114da565b90506113e581868661150c565b9250925050935093915050565b60408051608081018252600080825260208201819052918101829052606081018290529061141f836115e7565b9050604051806080016040528061144f8360008151811061144257611442613052565b602002602001015161161a565b815260200161146a8360018151811061144257611442613052565b81526020016114928360028151811061148557611485613052565b6020026020010151611621565b81526020016114ad8360038151811061148557611485613052565b90529392505050565b6000806114c2866114da565b90506114d081868686611723565b9695505050505050565b606081805190602001206040516020016114f691815260200190565b6040516020818303038152906040529050919050565b60006060600061151b85611759565b9050600080600061152d848a89611853565b815192955090935091501580806115415750815b61158d5760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e00000000000060448201526064016102b1565b6000816115a957604051806020016040528060008152506115d5565b6115d5866115b860018861307e565b815181106115c8576115c8613052565b6020026020010151611c77565b919b919a509098505050505050505050565b60408051808201825260008082526020918201528151808301909252825182528083019082015260609061048a90611ca1565b600061048a825b60006021826000015111156116785760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e00000000000060448201526064016102b1565b600080600061168685611e8d565b9194509250905060008160018111156116a1576116a1613095565b146116ee5760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e00000000000060448201526064016102b1565b600083866020015161170091906130ab565b805190915060208410156114d05760208490036101000a90049695505050505050565b600080600061173387868661150c565b915091508180156113be57508051602080830191909120875191880191909120146113be565b60606000611766836115e7565b9050600081516001600160401b0381111561178357611783612759565b6040519080825280602002602001820160405280156117c857816020015b60408051808201909152606080825260208201528152602001906001900390816117a15790505b50905060005b825181101561184b5760006117fb8483815181106117ee576117ee613052565b60200260200101516121d7565b90506040518060400160405280828152602001611817836115e7565b81525083838151811061182c5761182c613052565b6020026020010181905250508080611843906130c3565b9150506117ce565b509392505050565b6000606081808061186387612267565b9050600086905060008061188a604051806040016040528060608152602001606081525090565b60005b8c51811015611c4f578c81815181106118a8576118a8613052565b6020026020010151915082846118be91906130ab565b93506118cb6001886130ab565b9650836119235781518051602090910120851461191e5760405162461bcd60e51b8152602060048201526011602482015270092dcecc2d8d2c840e4dedee840d0c2e6d607b1b60448201526064016102b1565b6119e0565b8151516020116119855781518051602090910120851461191e5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c2068617368000000000060448201526064016102b1565b8461199383600001516123a1565b146119e05760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f6465206861736800000000000060448201526064016102b1565b6119ec601060016130ab565b8260200151511415611a65578551841415611a0657611c4f565b6000868581518110611a1a57611a1a613052565b602001015160f81c60f81b60f81c9050600083602001518260ff1681518110611a4557611a45613052565b60200260200101519050611a58816123c9565b9650600194505050611c3d565b60028260200151511415611bf5576000611a7e836123ff565b9050600081600081518110611a9557611a95613052565b016020015160f81c90506000611aac6002836130f4565b611ab7906002613116565b90506000611ac8848360ff16612423565b90506000611ad68b8a612423565b90506000611ae48383612459565b905060ff851660021480611afb575060ff85166003145b15611b3557808351148015611b105750808251145b15611b2257611b1f818b6130ab565b99505b50600160ff1b9950611c4f945050505050565b60ff85161580611b48575060ff85166001145b15611b9e5782518114611b685750600160ff1b9950611c4f945050505050565b611b8f8860200151600181518110611b8257611b82613052565b60200260200101516123c9565b9a509750611c3d945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e206044820152650e0e4caccd2f60d31b60648201526084016102b1565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e00000060448201526064016102b1565b80611c47816130c3565b91505061188d565b50600160ff1b841486611c628786612423565b909e909d50909b509950505050505050505050565b6020810151805160609161048a91611c919060019061307e565b815181106117ee576117ee613052565b6060600080611caf84611e8d565b91935090915060019050816001811115611ccb57611ccb613095565b14611d185760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c50206c6973742076616c75652e00000000000000000060448201526064016102b1565b6040805160208082526104208201909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081611d315790505090506000835b8651811015611e825760208210611dca5760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201526939ba103632b733ba341760b11b60648201526084016102b1565b600080611e076040518060400160405280858c60000151611deb919061307e565b8152602001858c60200151611e0091906130ab565b9052611e8d565b509150915060405180604001604052808383611e2391906130ab565b8152602001848b60200151611e3891906130ab565b815250858581518110611e4d57611e4d613052565b6020908102919091010152611e636001856130ab565b9350611e6f81836130ab565b611e7990846130ab565b92505050611d5e565b508152949350505050565b600080600080846000015111611ee55760405162461bcd60e51b815260206004820152601860248201527f524c50206974656d2063616e6e6f74206265206e756c6c2e000000000000000060448201526064016102b1565b6020840151805160001a607f8111611f0a5760006001600094509450945050506121d0565b60b78111611f86576000611f1f60808361307e565b905080876000015111611f745760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420524c502073686f727420737472696e672e0000000000000060448201526064016102b1565b600195509350600092506121d0915050565b60bf8111612075576000611f9b60b78361307e565b905080876000015111611ff05760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e0060448201526064016102b1565b600183015160208290036101000a900461200a81836130ab565b8851116120595760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c50206c6f6e6720737472696e672e000000000000000060448201526064016102b1565b6120648260016130ab565b96509450600093506121d092505050565b60f781116120f057600061208a60c08361307e565b9050808760000151116120df5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c502073686f7274206c6973742e00000000000000000060448201526064016102b1565b6001955093508492506121d0915050565b60006120fd60f78361307e565b9050808760000151116121525760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e00000060448201526064016102b1565b600183015160208290036101000a900461216c81836130ab565b8851116121b45760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b210292628103637b733903634b9ba1760511b60448201526064016102b1565b6121bf8260016130ab565b96509450600193506121d092505050565b9193909250565b606060008060006121e785611e8d565b91945092509050600081600181111561220257612202613095565b1461224f5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c502062797465732076616c75652e000000000000000060448201526064016102b1565b61225e856020015184846124d5565b95945050505050565b60606000825160026122799190613139565b6001600160401b0381111561229057612290612759565b6040519080825280601f01601f1916602001820160405280156122ba576020820181803683370190505b50905060005b835181101561239a5760048482815181106122dd576122dd613052565b01602001516001600160f81b031916901c826122fa836002613139565b8151811061230a5761230a613052565b60200101906001600160f81b031916908160001a905350601084828151811061233557612335613052565b0160200151612347919060f81c6130f4565b60f81b82612356836002613139565b6123619060016130ab565b8151811061237157612371613052565b60200101906001600160f81b031916908160001a90535080612392816130c3565b9150506122c0565b5092915050565b60006020825110156123b557506020015190565b8180602001905181019061048a9190613158565b600060606020836000015110156123ea576123e3836125b3565b90506123f6565b6123f3836121d7565b90505b611104816123a1565b606061048a61241e83602001516000815181106117ee576117ee613052565b612267565b606082518210612442575060408051602081019091526000815261048a565b6111048383848651612454919061307e565b6125be565b6000805b80845111801561246d5750808351115b80156124be575082818151811061248657612486613052565b602001015160f81c60f81b6001600160f81b0319168482815181106124ad576124ad613052565b01602001516001600160f81b031916145b1561110457806124cd816130c3565b91505061245d565b60606000826001600160401b038111156124f1576124f1612759565b6040519080825280601f01601f19166020018201604052801561251b576020820181803683370190505b50905080516000141561252f579050611104565b600061253b85876130ab565b90506020820160005b61254f602087613171565b81101561258657825182526125656020846130ab565b92506125726020836130ab565b91508061257e816130c3565b915050612544565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b606061048a82612715565b6060816125cc81601f6130ab565b101561260b5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016102b1565b8261261683826130ab565b10156126555760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016102b1565b61265f82846130ab565b845110156126a35760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016102b1565b6060821580156126c2576040519150600082526020820160405261270c565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156126fb5780518352602092830192016126e3565b5050858452601f01601f1916604052505b50949350505050565b606061048a8260200151600084600001516124d5565b60006020828403121561273d57600080fd5b5035919050565b6001600160a01b0381168114610d4657600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561279157612791612759565b60405290565b60405160a081016001600160401b038111828210171561279157612791612759565b604051601f8201601f191681016001600160401b03811182821017156127e1576127e1612759565b604052919050565b60006001600160401b0383111561280257612802612759565b612815601f8401601f19166020016127b9565b905082815283838301111561282957600080fd5b828260208301376000602084830101529392505050565b600082601f83011261285157600080fd5b611104838335602085016127e9565b803563ffffffff8116811461287457600080fd5b919050565b60008060006060848603121561288e57600080fd5b833561289981612744565b925060208401356001600160401b038111156128b457600080fd5b6128c086828701612840565b9250506128cf60408501612860565b90509250925092565b6000602082840312156128ea57600080fd5b81356001600160401b0381111561290057600080fd5b8201601f8101841361291157600080fd5b612920848235602084016127e9565b949350505050565b60008060008060008060c0878903121561294157600080fd5b863561294c81612744565b9550602087013561295c81612744565b945060408701356001600160401b0381111561297757600080fd5b61298389828a01612840565b9450506060870135925061299960808801612860565b91506129a760a08801612860565b90509295509295509295565b6000602082840312156129c557600080fd5b813561110481612744565b600060a082840312156129e257600080fd5b60405160a081016001600160401b038282108183111715612a0557612a05612759565b81604052829350843583526020850135602084015260408501356040840152606085013560608401526080850135915080821115612a4257600080fd5b50612a4f85828601612840565b6080830152505092915050565b600060408284031215612a6e57600080fd5b612a7661276f565b9050813581526020808301356001600160401b0380821115612a9757600080fd5b818501915085601f830112612aab57600080fd5b813581811115612abd57612abd612759565b8060051b9150612ace8483016127b9565b8181529183018401918481019088841115612ae857600080fd5b938501935b83851015612b0657843582529385019390850190612aed565b808688015250505050505092915050565b600080600080600060a08688031215612b2f57600080fd5b8535612b3a81612744565b94506020860135612b4a81612744565b935060408601356001600160401b0380821115612b6657600080fd5b612b7289838a01612840565b9450606088013593506080880135915080821115612b8f57600080fd5b9087019060a0828a031215612ba357600080fd5b612bab612797565b82358152602083013582811115612bc157600080fd5b612bcd8b8286016129d0565b602083015250604083013582811115612be557600080fd5b612bf18b828601612a5c565b604083015250606083013582811115612c0957600080fd5b612c158b828601612840565b606083015250608083013582811115612c2d57600080fd5b612c398b828601612840565b6080830152508093505050509295509295909350565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b805164ffffffffff8116811461287457600080fd5b600060208284031215612cab57600080fd5b61110482612c84565b60005b83811015612ccf578181015183820152602001612cb7565b83811115612cde576000848401525b50505050565b60008151808452612cfc816020860160208601612cb4565b601f01601f19169290920160200192915050565b6001600160a01b0385168152608060208201819052600090612d3490830186612ce4565b905064ffffffffff8416604083015263ffffffff8316606083015295945050505050565b6020815260006111046020830184612ce4565b600060208284031215612d7d57600080fd5b815161110481612744565b600060608284031215612d9a57600080fd5b604051606081018181106001600160401b0382111715612dbc57612dbc612759565b60405282518152612dcf60208401612c84565b6020820152612de060408401612c84565b60408201529392505050565b6001600160a01b0385811682528416602082015263ffffffff831660408201526080606082018190526000906114d090830184612ce4565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60008251612e84818460208701612cb4565b9190910192915050565b60008451612ea0818460208901612cb4565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b6001600160a01b03858116825284166020820152608060408201819052600090612ef990830185612ce4565b905082606083015295945050505050565b60018060a01b038416815282602082015260606040820152600061225e6060830184612ce4565b805182526020810151602083015260408101516040830152606081015160608301526000608082015160a0608085015261292060a0850182612ce4565b6020815260006111046020830184612f31565b600060208284031215612f9357600080fd5b8151801515811461110457600080fd5b83815260006020606081840152612fbd6060840186612f31565b83810360408501526040810185518252828601516040848401528181518084526060850191508583019450600093505b8084101561300d5784518252938501936001939093019290850190612fed565b509998505050505050505050565b6000835161302d818460208801612cb4565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561309057613090613068565b500390565b634e487b7160e01b600052602160045260246000fd5b600082198211156130be576130be613068565b500190565b60006000198214156130d7576130d7613068565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600060ff831680613107576131076130de565b8060ff84160691505092915050565b600060ff821660ff84168082101561313057613130613068565b90039392505050565b600081600019048311821515161561315357613153613068565b500290565b60006020828403121561316a57600080fd5b5051919050565b600082613180576131806130de565b50049056fea2646970667358221220308f056670909e7f5b3cb7f61713853e91d7ad0906b514383d7ba9154478d46c64736f6c634300080b0033";
        public L1CrossDomainMessengerDeploymentBase() : base(BYTECODE) { }
        public L1CrossDomainMessengerDeploymentBase(string byteCode) : base(byteCode) { }

    }

    public partial class AllowMessageFunction : AllowMessageFunctionBase { }

    [Function("allowMessage")]
    public class AllowMessageFunctionBase : FunctionMessage
    {
        [Parameter("bytes32", "_xDomainCalldataHash", 1)]
        public virtual byte[] XDomainCalldataHash { get; set; }
    }

    public partial class BlockMessageFunction : BlockMessageFunctionBase { }

    [Function("blockMessage")]
    public class BlockMessageFunctionBase : FunctionMessage
    {
        [Parameter("bytes32", "_xDomainCalldataHash", 1)]
        public virtual byte[] XDomainCalldataHash { get; set; }
    }

    public partial class BlockedMessagesFunction : BlockedMessagesFunctionBase { }

    [Function("blockedMessages", "bool")]
    public class BlockedMessagesFunctionBase : FunctionMessage
    {
        [Parameter("bytes32", "", 1)]
        public virtual byte[] ReturnValue1 { get; set; }
    }

    public partial class InitializeFunction : InitializeFunctionBase { }

    [Function("initialize")]
    public class InitializeFunctionBase : FunctionMessage
    {
        [Parameter("address", "_libAddressManager", 1)]
        public virtual string LibAddressManager { get; set; }
    }

    public partial class LibAddressManagerFunction : LibAddressManagerFunctionBase { }

    [Function("libAddressManager", "address")]
    public class LibAddressManagerFunctionBase : FunctionMessage
    {

    }

    public partial class OwnerFunction : OwnerFunctionBase { }

    [Function("owner", "address")]
    public class OwnerFunctionBase : FunctionMessage
    {

    }

    public partial class PauseFunction : PauseFunctionBase { }

    [Function("pause")]
    public class PauseFunctionBase : FunctionMessage
    {

    }

    public partial class PausedFunction : PausedFunctionBase { }

    [Function("paused", "bool")]
    public class PausedFunctionBase : FunctionMessage
    {

    }

    public partial class RelayMessageFunction : RelayMessageFunctionBase { }

    [Function("relayMessage")]
    public class RelayMessageFunctionBase : FunctionMessage
    {
        [Parameter("address", "_target", 1)]
        public virtual string Target { get; set; }
        [Parameter("address", "_sender", 2)]
        public virtual string Sender { get; set; }
        [Parameter("bytes", "_message", 3)]
        public virtual byte[] Message { get; set; }
        [Parameter("uint256", "_messageNonce", 4)]
        public virtual BigInteger MessageNonce { get; set; }
        [Parameter("tuple", "_proof", 5)]
        public virtual L2MessageInclusionProof Proof { get; set; }
    }

    public partial class RelayedMessagesFunction : RelayedMessagesFunctionBase { }

    [Function("relayedMessages", "bool")]
    public class RelayedMessagesFunctionBase : FunctionMessage
    {
        [Parameter("bytes32", "", 1)]
        public virtual byte[] ReturnValue1 { get; set; }
    }

    public partial class RenounceOwnershipFunction : RenounceOwnershipFunctionBase { }

    [Function("renounceOwnership")]
    public class RenounceOwnershipFunctionBase : FunctionMessage
    {

    }

    public partial class ReplayMessageFunction : ReplayMessageFunctionBase { }

    [Function("replayMessage")]
    public class ReplayMessageFunctionBase : FunctionMessage
    {
        [Parameter("address", "_target", 1)]
        public virtual string Target { get; set; }
        [Parameter("address", "_sender", 2)]
        public virtual string Sender { get; set; }
        [Parameter("bytes", "_message", 3)]
        public virtual byte[] Message { get; set; }
        [Parameter("uint256", "_queueIndex", 4)]
        public virtual BigInteger QueueIndex { get; set; }
        [Parameter("uint32", "_oldGasLimit", 5)]
        public virtual uint OldGasLimit { get; set; }
        [Parameter("uint32", "_newGasLimit", 6)]
        public virtual uint NewGasLimit { get; set; }
    }

    public partial class ResolveFunction : ResolveFunctionBase { }

    [Function("resolve", "address")]
    public class ResolveFunctionBase : FunctionMessage
    {
        [Parameter("string", "_name", 1)]
        public virtual string Name { get; set; }
    }

    public partial class SendMessageFunction : SendMessageFunctionBase { }

    [Function("sendMessage")]
    public class SendMessageFunctionBase : FunctionMessage
    {
        [Parameter("address", "_target", 1)]
        public virtual string Target { get; set; }
        [Parameter("bytes", "_message", 2)]
        public virtual byte[] Message { get; set; }
        [Parameter("uint32", "_gasLimit", 3)]
        public virtual uint GasLimit { get; set; }
    }

    public partial class SuccessfulMessagesFunction : SuccessfulMessagesFunctionBase { }

    [Function("successfulMessages", "bool")]
    public class SuccessfulMessagesFunctionBase : FunctionMessage
    {
        [Parameter("bytes32", "", 1)]
        public virtual byte[] ReturnValue1 { get; set; }
    }

    public partial class TransferOwnershipFunction : TransferOwnershipFunctionBase { }

    [Function("transferOwnership")]
    public class TransferOwnershipFunctionBase : FunctionMessage
    {
        [Parameter("address", "newOwner", 1)]
        public virtual string NewOwner { get; set; }
    }

    public partial class XDomainMessageSenderFunction : XDomainMessageSenderFunctionBase { }

    [Function("xDomainMessageSender", "address")]
    public class XDomainMessageSenderFunctionBase : FunctionMessage
    {

    }

    public partial class FailedRelayedMessageEventDTO : FailedRelayedMessageEventDTOBase { }

    [Event("FailedRelayedMessage")]
    public class FailedRelayedMessageEventDTOBase : IEventDTO
    {
        [Parameter("bytes32", "msgHash", 1, true)]
        public virtual byte[] MsgHash { get; set; }
    }

    public partial class MessageAllowedEventDTO : MessageAllowedEventDTOBase { }

    [Event("MessageAllowed")]
    public class MessageAllowedEventDTOBase : IEventDTO
    {
        [Parameter("bytes32", "_xDomainCalldataHash", 1, true)]
        public virtual byte[] XDomainCalldataHash { get; set; }
    }

    public partial class MessageBlockedEventDTO : MessageBlockedEventDTOBase { }

    [Event("MessageBlocked")]
    public class MessageBlockedEventDTOBase : IEventDTO
    {
        [Parameter("bytes32", "_xDomainCalldataHash", 1, true)]
        public virtual byte[] XDomainCalldataHash { get; set; }
    }

    public partial class OwnershipTransferredEventDTO : OwnershipTransferredEventDTOBase { }

    [Event("OwnershipTransferred")]
    public class OwnershipTransferredEventDTOBase : IEventDTO
    {
        [Parameter("address", "previousOwner", 1, true)]
        public virtual string PreviousOwner { get; set; }
        [Parameter("address", "newOwner", 2, true)]
        public virtual string NewOwner { get; set; }
    }

    public partial class PausedEventDTO : PausedEventDTOBase { }

    [Event("Paused")]
    public class PausedEventDTOBase : IEventDTO
    {
        [Parameter("address", "account", 1, false)]
        public virtual string Account { get; set; }
    }

    public partial class RelayedMessageEventDTO : RelayedMessageEventDTOBase { }

    [Event("RelayedMessage")]
    public class RelayedMessageEventDTOBase : IEventDTO
    {
        [Parameter("bytes32", "msgHash", 1, true)]
        public virtual byte[] MsgHash { get; set; }
    }

    public partial class SentMessageEventDTO : SentMessageEventDTOBase { }

    [Event("SentMessage")]
    public class SentMessageEventDTOBase : IEventDTO
    {
        [Parameter("address", "target", 1, true)]
        public virtual string Target { get; set; }
        [Parameter("address", "sender", 2, false)]
        public virtual string Sender { get; set; }
        [Parameter("bytes", "message", 3, false)]
        public virtual byte[] Message { get; set; }
        [Parameter("uint256", "messageNonce", 4, false)]
        public virtual BigInteger MessageNonce { get; set; }
        [Parameter("uint256", "gasLimit", 5, false)]
        public virtual BigInteger GasLimit { get; set; }
    }

    public partial class UnpausedEventDTO : UnpausedEventDTOBase { }

    [Event("Unpaused")]
    public class UnpausedEventDTOBase : IEventDTO
    {
        [Parameter("address", "account", 1, false)]
        public virtual string Account { get; set; }
    }





    public partial class BlockedMessagesOutputDTO : BlockedMessagesOutputDTOBase { }

    [FunctionOutput]
    public class BlockedMessagesOutputDTOBase : IFunctionOutputDTO
    {
        [Parameter("bool", "", 1)]
        public virtual bool ReturnValue1 { get; set; }
    }



    public partial class LibAddressManagerOutputDTO : LibAddressManagerOutputDTOBase { }

    [FunctionOutput]
    public class LibAddressManagerOutputDTOBase : IFunctionOutputDTO
    {
        [Parameter("address", "", 1)]
        public virtual string ReturnValue1 { get; set; }
    }

    public partial class OwnerOutputDTO : OwnerOutputDTOBase { }

    [FunctionOutput]
    public class OwnerOutputDTOBase : IFunctionOutputDTO
    {
        [Parameter("address", "", 1)]
        public virtual string ReturnValue1 { get; set; }
    }



    public partial class PausedOutputDTO : PausedOutputDTOBase { }

    [FunctionOutput]
    public class PausedOutputDTOBase : IFunctionOutputDTO
    {
        [Parameter("bool", "", 1)]
        public virtual bool ReturnValue1 { get; set; }
    }



    public partial class RelayedMessagesOutputDTO : RelayedMessagesOutputDTOBase { }

    [FunctionOutput]
    public class RelayedMessagesOutputDTOBase : IFunctionOutputDTO
    {
        [Parameter("bool", "", 1)]
        public virtual bool ReturnValue1 { get; set; }
    }





    public partial class ResolveOutputDTO : ResolveOutputDTOBase { }

    [FunctionOutput]
    public class ResolveOutputDTOBase : IFunctionOutputDTO
    {
        [Parameter("address", "", 1)]
        public virtual string ReturnValue1 { get; set; }
    }



    public partial class SuccessfulMessagesOutputDTO : SuccessfulMessagesOutputDTOBase { }

    [FunctionOutput]
    public class SuccessfulMessagesOutputDTOBase : IFunctionOutputDTO
    {
        [Parameter("bool", "", 1)]
        public virtual bool ReturnValue1 { get; set; }
    }



    public partial class XDomainMessageSenderOutputDTO : XDomainMessageSenderOutputDTOBase { }

    [FunctionOutput]
    public class XDomainMessageSenderOutputDTOBase : IFunctionOutputDTO
    {
        [Parameter("address", "", 1)]
        public virtual string ReturnValue1 { get; set; }
    }
}
